<!DOCTYPE html>
<html lang="en">

    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>

        <script type="text/javascript">
        /* 
                JS中为我们提供了三种逻辑运算符
                    ! 非
                        - !可以用来对一个值进行非运算
                        - 所谓非元素就是对一个布尔值进行取反操作。
                            true变false, false变true
                        - 如果对一个值进行两次取反,它不会变化
                        - 如果对非布尔值进行元素,则会将其转换为布尔值,然后再取反。
                            所以我们可以利用该特点,来将一个其它的数据类型转换为布尔值
                            可以为一个任意数据类型取两次反,来将其转换为布尔值
                            原理和Boolean()函数一样
                        
                        隐式类型转换:
                            - 为任意的数据类型做两次类型转换,即可将其转换为布尔值。
                            - 例子:
                                var a = "hello";
                                a = !!a;

                    && 与
                        - && 可以对符号两侧的值进行与运算并返回结果。
                        - 运算规则
                            - 两个值都为true时，才会返回true
                                - 两个值只要有一个是false,就是false

                            - JS中的"与"属于短路的与,如果第一个值为false,则不会看第二个值。




                    || 或
                        - ||可以对符号两侧的值进行或运算并返回结果。
                        - 运算规则:
                            - 两个值中只要有一个true,就返回true
                                如果两个值都为false,才返回false.
                            - JS中的"或"属于短路的或
                                如果第一个值为true,则不会检查第二个值

             */

        var a = true;
        //对a进行非运算

        console.log("a = " + a);


        var b = 10;
        b = !b;

        console.log("b = " + b);
        console.log(typeof b);

        //如果两个值都是true,则返回true
        var result = true && true;
        console.log("resulte" + result);

        //只要有一个false就返回false
        result = true && false;
        console.log("result = " + result);


        //第一个值为true,会检查第二个值
        true && alert("看我出不来!!");

        //第一个值为false,不会检查第二个值
        false && alert("看我出不来!!");



        //两个都是false,则返回false
        result = false || false;

        //只有有一个true,就返回true
        result = true || false;
        result = false || true;
        result = true || true;

        console.log("result = " + result);

        //第一个值为false,则会检查第二个值
        false || alert("123");

        //第一个值为true,则不再检查第二个
        true || alert("123");
    </script>
    </head>

    <body>

    </body>

</html>